package com.clearlyspam23.GLE.basic.serializers; import java.util.HashMap; import java.util.Map; import com.clearlyspam23.GLE.level.Layer; import com.clearlyspam23.GLE.level.LayerData; import com.clearlyspam23.GLE.level.Level; import com.clearlyspam23.GLE.level.LevelData; import com.clearlyspam23.GLE.template.LevelSerializer; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class JsonSerializer extends LevelSerializer { private Gson gson; private JsonParser parser; private Map<String, Class<?>> registeredClassesMap = new HashMap<String, Class<?>>(); public JsonSerializer(){ gson = new GsonBuilder().setPrettyPrinting().create(); parser = new JsonParser(); } @Override public String serialize(LevelData data) { String s = gson.toJson(data); return s; } @Override public boolean canSerialize(LayerData data) { return true; } @Override public String getName() { return "JSON"; } @Override public void registerDataType(String name, Object data) { registeredClassesMap.put(name, data.getClass()); } @Override public LevelData deserialize(Level level, String data) { JsonObject o = parser.parse(data).getAsJsonObject(); JsonArray layers = o.remove("layers").getAsJsonArray(); LayerData[] lDataLayers = new LayerData[layers.size()]; for(int i = 0; i < layers.size(); i++){ Layer layer = level.getLayers().get(i); JsonObject ldat = layers.get(i).getAsJsonObject(); lDataLayers[i] = new LayerData(ldat.get("name").getAsString(), gson.fromJson(ldat.get("data"), layer.getExportDataClass())); } LevelData lData = gson.fromJson(o, LevelData.class); lData.layers = lDataLayers; return lData; } @Override public String getDefaultExtension() { return ".json"; } }